package cn.cjx.system.service.impl;

import cn.cjx.system.domain.Menu;

import cn.cjx.system.mapper.MenuMapper;
import cn.cjx.system.service.IMenuService;
import cn.cjx.basic.service.impl.BaseServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author cjx
 * @since 2022-05-13
 */
@Service
public class MenuServiceImpl extends BaseServiceImpl<Menu> implements IMenuService {

	@Autowired
	private MenuMapper menuMapper;

	public List<Menu> getTree() {
		// 1.查询出全部数据
		List<Menu> menus = menuMapper.loadAll();

		// 把list集合数据转换为map，stream玩法
		Map<Long, Menu> menuMap = menus.stream().collect(Collectors.toMap(Menu::getId, item -> item));

		// 2 顶级对象组成的集合
		List<Menu> firstTrees = new ArrayList<>();
		// 4.从所有数据中找到一级数据 1000条数据
		for (Menu menu : menus) { // 循环1000次
			// 3.1.找顶级对象成list
			if (menu.getParentId() == null){
				// 找到一级，放入到空集合中
				firstTrees.add(menu);
			}else { // 3.2.不是顶级，那么就应该是某个顶级下面的节点
				// 各位请找你们的父亲，并把自己加入到父亲的children
				Menu parent = menuMap.get(menu.getParentId());
				if (parent != null){
					// 将儿子放入到父亲中
					parent.getChildren().add(menu);
				}
			}
		}
		return firstTrees;
	}
	/*@Override
	public List<Menu> getTree() {
		// 1.查询出全部数据
		List<Menu> menus = menuMapper.loadAll();
		// 把list集合数据转换为map，stream玩法
		// Map<Long, Menu> menuMap = menus.stream().collect(Collectors.toMap(Menu::getId, item -> item));
		// 3.把list集合数据转换为map, 普通方式
		Map<Long, Menu> menuMap = new HashMap<>();
		for (Menu menu : menus) {
			menuMap.put(menu.getId(), menu);
		}
		// 2创建一个空的List，用于装遍历出来的一级对象
		List<Menu> trees = new ArrayList<>();
		// 4.从所有数据中找到一级数据 1000条数据
		for (Menu menu : menus) { // 循环1000次
			// 3.1.查找到上级Id为空的对象，就是一级对象
			if (menu.getParentId() == null) {
				// 找到一级，放入到空集合中
				trees.add(menu);
			} else { // 3.2.如果父级Id不为null，那么意味着他是其它级数据
				// 得到父亲
				Menu Menu = menuMap.get(menu.getParentId());
				if (Menu != null) {
					// 将儿子放入到父亲中
					Menu.getChildren().add(menu);
				}
			}
		}

		return trees;
	}*/

}
